package com.ruoyi.system.domain;

import java.util.Date;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;

/**
 * 题目对象 topic
 *
 * @author ltr
 * @date 2024-10-22
 */
public class Topic extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 题目ID */
    private Long topicId;

    /** 教师ID（关联teacher_info） */
    @Excel(name = "教师ID")
    private Long teacherId;

    /** 题目名称 */
    @Excel(name = "题目名称")
    private String title;

    /** 题目描述 */
    @Excel(name = "题目描述")
    private String description;

    /** 技能要求说明 */
    @Excel(name = "技能要求")
    private String requirements;

    /** 难度等级（简单/中等/困难） */
    @Excel(name = "难度等级")
    private String difficulty;

    /** 最大可指导学生数 */
    @Excel(name = "最大学生数")
    private Integer maxStudents;

    /** 当前已录取学生数 */
    @Excel(name = "当前学生数")
    private Integer currentStudents;

    /** 题目状态（开放/已满/已关闭） */
    @Excel(name = "题目状态")
    private String status;

    /** 审核状态（待审核/已通过/已拒绝） */
    @Excel(name = "审核状态")
    private String auditStatus;

    /** 审核意见（拒绝理由） */
    private String auditOpinion;

    /** 审核时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date auditTime;

    /** 审核人 */
    private String auditBy;

    /** 标签（JSON数组格式） */
    private String tags;

    /** 待审核的题目名称 */
    private String pendingTitle;

    /** 待审核的题目描述 */
    private String pendingDescription;

    /** 待审核的技能要求 */
    private String pendingRequirements;

    /** 待审核的难度等级 */
    private String pendingDifficulty;

    /** 待审核的最大学生数 */
    private Integer pendingMaxStudents;

    /** 待审核的标签 */
    private String pendingTags;

    /** 是否有待审核的修改(0-无,1-有) */
    private Integer hasPendingChanges;

    /** 教师姓名（关联查询，不存数据库） */
    @Excel(name = "教师姓名")
    private String teacherName;

    /** 教师工号（关联查询，不存数据库） */
    private String teacherNo;

    /** 教师职称（关联查询，不存数据库） - 新增 */
    private String teacherTitle;

    /** 教师研究方向（关联查询，不存数据库） - 新增 */
    private String researchDirection;

    /** 教师最大指导学生数（关联查询，不存数据库） - 新增 */
    private Integer teacherMaxStudents;

    /** 教师当前指导学生数（关联查询，不存数据库） - 新增 */
    private Integer teacherCurrentStudents;

    /** 教师邮箱（关联查询，不存数据库） - 新增 */
    private String teacherEmail;

    /** 教师办公室位置（关联查询，不存数据库） - 新增 */
    private String officeLocation;

    /** 教师个人简介（关联查询，不存数据库） - 新增 */
    private String introduction;

    public void setTopicId(Long topicId)
    {
        this.topicId = topicId;
    }

    public Long getTopicId()
    {
        return topicId;
    }

    public void setTeacherId(Long teacherId)
    {
        this.teacherId = teacherId;
    }

    public Long getTeacherId()
    {
        return teacherId;
    }

    public void setTitle(String title)
    {
        this.title = title;
    }

    public String getTitle()
    {
        return title;
    }

    public void setDescription(String description)
    {
        this.description = description;
    }

    public String getDescription()
    {
        return description;
    }

    public void setRequirements(String requirements)
    {
        this.requirements = requirements;
    }

    public String getRequirements()
    {
        return requirements;
    }

    public void setDifficulty(String difficulty)
    {
        this.difficulty = difficulty;
    }

    public String getDifficulty()
    {
        return difficulty;
    }

    public void setMaxStudents(Integer maxStudents)
    {
        this.maxStudents = maxStudents;
    }

    public Integer getMaxStudents()
    {
        return maxStudents;
    }

    public void setCurrentStudents(Integer currentStudents)
    {
        this.currentStudents = currentStudents;
    }

    public Integer getCurrentStudents()
    {
        return currentStudents;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    public String getStatus()
    {
        return status;
    }

    public void setAuditStatus(String auditStatus)
    {
        this.auditStatus = auditStatus;
    }

    public String getAuditStatus()
    {
        return auditStatus;
    }

    public void setAuditOpinion(String auditOpinion)
    {
        this.auditOpinion = auditOpinion;
    }

    public String getAuditOpinion()
    {
        return auditOpinion;
    }

    public void setAuditTime(Date auditTime)
    {
        this.auditTime = auditTime;
    }

    public Date getAuditTime()
    {
        return auditTime;
    }

    public void setAuditBy(String auditBy)
    {
        this.auditBy = auditBy;
    }

    public String getAuditBy()
    {
        return auditBy;
    }

    public void setTags(String tags)
    {
        this.tags = tags;
    }

    public String getTags()
    {
        return tags;
    }

    public void setPendingTitle(String pendingTitle)
    {
        this.pendingTitle = pendingTitle;
    }

    public String getPendingTitle()
    {
        return pendingTitle;
    }

    public void setPendingDescription(String pendingDescription)
    {
        this.pendingDescription = pendingDescription;
    }

    public String getPendingDescription()
    {
        return pendingDescription;
    }

    public void setPendingRequirements(String pendingRequirements)
    {
        this.pendingRequirements = pendingRequirements;
    }

    public String getPendingRequirements()
    {
        return pendingRequirements;
    }

    public void setPendingDifficulty(String pendingDifficulty)
    {
        this.pendingDifficulty = pendingDifficulty;
    }

    public String getPendingDifficulty()
    {
        return pendingDifficulty;
    }

    public void setPendingMaxStudents(Integer pendingMaxStudents)
    {
        this.pendingMaxStudents = pendingMaxStudents;
    }

    public Integer getPendingMaxStudents()
    {
        return pendingMaxStudents;
    }

    public void setPendingTags(String pendingTags)
    {
        this.pendingTags = pendingTags;
    }

    public String getPendingTags()
    {
        return pendingTags;
    }

    public void setHasPendingChanges(Integer hasPendingChanges)
    {
        this.hasPendingChanges = hasPendingChanges;
    }

    public Integer getHasPendingChanges()
    {
        return hasPendingChanges;
    }

    public String getTeacherName()
    {
        return teacherName;
    }

    public void setTeacherName(String teacherName)
    {
        this.teacherName = teacherName;
    }

    public String getTeacherNo()
    {
        return teacherNo;
    }

    public void setTeacherNo(String teacherNo)
    {
        this.teacherNo = teacherNo;
    }

    public String getTeacherTitle()
    {
        return teacherTitle;
    }

    public void setTeacherTitle(String teacherTitle)
    {
        this.teacherTitle = teacherTitle;
    }

    public String getResearchDirection()
    {
        return researchDirection;
    }

    public void setResearchDirection(String researchDirection)
    {
        this.researchDirection = researchDirection;
    }

    public Integer getTeacherMaxStudents()
    {
        return teacherMaxStudents;
    }

    public void setTeacherMaxStudents(Integer teacherMaxStudents)
    {
        this.teacherMaxStudents = teacherMaxStudents;
    }

    public Integer getTeacherCurrentStudents()
    {
        return teacherCurrentStudents;
    }

    public void setTeacherCurrentStudents(Integer teacherCurrentStudents)
    {
        this.teacherCurrentStudents = teacherCurrentStudents;
    }

    public String getTeacherEmail()
    {
        return teacherEmail;
    }

    public void setTeacherEmail(String teacherEmail)
    {
        this.teacherEmail = teacherEmail;
    }

    public String getOfficeLocation()
    {
        return officeLocation;
    }

    public void setOfficeLocation(String officeLocation)
    {
        this.officeLocation = officeLocation;
    }

    public String getIntroduction()
    {
        return introduction;
    }

    public void setIntroduction(String introduction)
    {
        this.introduction = introduction;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("topicId", getTopicId())
                .append("teacherId", getTeacherId())
                .append("title", getTitle())
                .append("description", getDescription())
                .append("requirements", getRequirements())
                .append("difficulty", getDifficulty())
                .append("maxStudents", getMaxStudents())
                .append("currentStudents", getCurrentStudents())
                .append("status", getStatus())
                .append("auditStatus", getAuditStatus())
                .append("auditOpinion", getAuditOpinion())
                .append("auditTime", getAuditTime())
                .append("auditBy", getAuditBy())
                .append("tags", getTags())
                .append("pendingTitle", getPendingTitle())
                .append("pendingDescription", getPendingDescription())
                .append("pendingRequirements", getPendingRequirements())
                .append("pendingDifficulty", getPendingDifficulty())
                .append("pendingMaxStudents", getPendingMaxStudents())
                .append("pendingTags", getPendingTags())
                .append("hasPendingChanges", getHasPendingChanges())
                .append("createTime", getCreateTime())
                .append("updateTime", getUpdateTime())
                .append("createBy", getCreateBy())
                .append("updateBy", getUpdateBy())
                .append("remark", getRemark())
                .toString();
    }
}